#if !defined(__APP_DEVICE_H)
#define __APP_DEVICE_H

#include "app_buffer.h"
#include <pthread.h>
#include <stdbool.h>

typedef struct
{
    char *filename;                        // 文件名==>蓝牙文件
    int fd;                                // 文件描述符
    Buffer *up_buffer;                     // 上行缓冲区
    Buffer *down_buffer;                   // 下行缓冲区
    pthread_t read_thread;                 // 读线程标识
    bool is_runninng;                      // 是否正在运行
    // long last_write_time;                  // 上次写时间==>两次写的时间间隔
    int (*post_read)(char *data, int len); // 读到数据后的回调函数，将数据转化成字符数组
    int (*pre_write)(char *data, int len , int size); // 写数据前的回调函数，将字符数组转化成设备需要的数据格式
} Device_t;

/**
 * @brief 初始化设备（只需要一个网关设备）
 * 
 * @param filename 蓝牙文件指针
 * @return int 成功返回0，失败返回-1
 */
int app_device_init(char *filename);

/**
 * @brief 启动设备
 * 
 * @return int 成功返回0，失败返回-1
 */
int app_device_start(void);

/**
 * @brief 停止设备
 * 
 * @return int 成功返回0，失败返回-1
 */
int app_device_stop(void);

#endif // __APP_DEVICE_H